import {setToken} from "./auth"

// 防抖指令
export function antiShake(fn) {
  let timer
  return function () {
    if (timer) clearTimeout(timer)
    timer = setTimeout(function () {
      fn.call(this)
    }, 500)
  }
}

// 从token中切除__csrf,并且存储到cookie中
export function csrf(token) {
  const arr = token.split(';')
  const __csrf = arr.find(item => {
    return item.match(/__csrf=.*?$/)
  })
  // 获取的__csrf=c1b36398d23fbcef3645b32dc17a1400 再次通过=切除
  const csrf_token = __csrf?.split('=')[1]
  setToken(csrf_token)
}

// 获取歌单id转为字符串 第二个参数用来判断是否是radio（电台）true
export function asString(arr = []) {
  let strId = ''

  // 遍历出id,将数组中的id转为字符串用来作请求
  arr.forEach(item => {
    // 判断当前id是否存在
    if (item?.id && !(item.mainSong)) {
      strId += item.id + ','
    } else if (item?.userId && !(item.mainSong)) {
      strId += item.userId + ','
    } else if (item?.mainSong?.id) {
      strId += item.mainSong.id + ','
    } else {
      strId += item + ','
    }
  })
  // 切除最最后一个逗号
  strId = strId.substring(0, strId.length - 1)

  return strId
}


// 秒转分秒
export const secondsToMinutes = (seconds) => {
  let time
  // 转换为分
  let minutes = parseInt((seconds / 60)).toFixed(0)
  // 转换为秒
  let secondsA = parseInt((seconds % 60)).toFixed(0)
  time = (minutes >= 10 ? minutes : ('0' + minutes)) + ':' + (secondsA >= 10 ? secondsA : ('0' + secondsA))
  return time
}

// 时间戳转换为分秒
export const timestampToSecondsMinutes = (timestamp, type = null) => {
  let timestampA = (timestamp / 1000)
  let time
  // 转换为分
  let minutes = parseInt((timestampA / 60)).toFixed(0)
  // 转换为秒
  let secondsA = parseInt((timestampA % 60)).toFixed(0)
  time = (minutes >= 10 ? minutes : ('0' + minutes)) + ':' + (secondsA >= 10 ? secondsA : ('0' + secondsA))
  if (!type) {
    return time
  } else {
    return minutes
  }
}

/**
 *@params：
 *@desc：解析歌词
 *@author：羽
 *@date 2022/08/08 10:13:05
 */

export const parseLyric = (text) => {
  // 解析歌词标签 text lrc全部文本
  // return {time:word} 例如{12300:'hello world'}
  // [m:s.ms] or [m:s:ms] or [m:s], [1:2.3] or [01:02.03] or [01:02] ...
  let res = [];// 结果
  if (typeof (text) != 'string') {
    return res;
  }// 检查参数
  let textArray = text.split('\n');// 歌词拆分
  let timeRule = [60000, 1000, 1];// 对应位数的毫秒数
  let addTime = 0;// 时间补偿
  for (let textArrayKey in textArray) {
    let textArrayItem = textArray[textArrayKey];
    if (textArrayItem.match(/(?:\[\d+\:\d+(?:[.:]\d+)?\])+.*/)) {// 判断是否符合歌词的规则
      let findWord = textArrayItem.replace(/(?:\[\d+\:\d+(?:[.:]\d+)?\])+/g, '').trim();// 歌去除时间保留歌词,并去除两端多余空格
      if (findWord) {// 去除歌词为空的项
        let findTime = textArrayItem.match(/(?:\[\d+\:\d+(?:[.:]\d+)?\])/g);// 匹配多个时间 例如 [1:2.3][4:2.4]hello world
        for (let findTimeKey in findTime) {
          let findTimeItem = findTime[findTimeKey].match(/\d+/g);// 切割每一个时间的m s ms部分
          let nowTime = addTime;// 初始为偏移时间 解决[offset:-232]操作
          for (let x = 0; x < findTimeItem.length; x++) {
            nowTime += parseInt(findTimeItem[x]) * timeRule[x];// 分钟,秒,毫秒转换为转毫秒之后累加
          }
          res.push({
            time: nowTime > 0 ? nowTime : 0,
            lyric: findWord
          })
        }
      }
    } else if (textArrayItem.match(/^\[offset\:\-?[1-9]\d+\]$/)) {// 匹配偏移时间 解决[offset:-232]操作
      // [offset:-232]正值表示整体提前，负值相反
      addTime -= parseInt(textArrayItem.substring(textArrayItem.indexOf(':') + 1, textArrayItem.length));
    }
  }
  return res;
}

/**
 *@params：
 *@desc：时间戳转为年月日格式
 *@author：羽
 *@date 2022/08/10 16:48:54
 */

export const timestampToYMD = (time, flag = '') => {
  const date = new Date(time)
  let Y = date.getFullYear()
  let M = date.getMonth() + 1
  let D = date.getDate()
  let day = date.getDay()
  let h = date.getHours() >= 10 ? date.getHours() : '0' + date.getHours()
  let m = date.getMinutes() >= 10 ? date.getMinutes() : '0' + date.getMinutes()
  let s = date.getSeconds() >= 10 ? date.getSeconds() : '0' + date.getSeconds()
  switch (flag) {
    case 's':
      return `${Y}-${M}-${D} ${h}:${m}:${s}`;
    case 'D':
      return D
    case 'd':
      let weekData = {
        0: '星期日',
        1: '星期一',
        2: '星期二',
        3: '星期三',
        4: '星期四',
        5: '星期五',
        6: '星期六'
      }
      return weekData[day]
    default:
      return `${Y}-${M}-${D}`;
  }
}

/**
 *@params：
 *@desc：时间戳转化为年龄
 *@author：羽
 *@date 2022/08/18 14:52:09
 */

export const getAge = (birthday) => {
  //出生时间 毫秒
  let birthDayTime = new Date(birthday).valueOf()
  //当前时间 毫秒
  let nowTime = new Date().valueOf()
  //一年毫秒数(365 * 86400000 = 31536000000)
  return Math.floor((nowTime - birthDayTime) / 31536000000)
}


export const shareType = (type) => {
  switch (type) {
    case 18:
        return '分享单曲'
    case 19:
      return '分享专辑'
    case 17:
    case 28:
      return '分享电台节目'
    case 22:
        return '转发'
    case 39:
      return '发布视频'
    case 35:
    case 13:
      return '分享歌单'
    case 24:
      return '分享专栏文章'
    case 41:
    case 21:
      return '分享视频'
    case 56:
      return '分享网页'
    case 31:
      return '分享评论'
    default:
      return '未知'
  }
}


export const eithType = (type) => {
  switch (type) {
    case 0:
      return '歌单'
    case 4:
      return '单曲'
    case 2:
      return '动态'
    default:
      return '未知'
  }
}

export const programType = (type) => {
  switch (type) {
    case 2:
      return '音乐'
    case 6:
      return '生活'
    case 3:
      return '情感'
    case 2001:
      return '创作翻唱'
    default:
      return
  }
  // id: 2 音乐 id: 6 生活 id:3 情感 id: 2001 创作翻唱
}

// 数组转为字符串通过 ',' 分割
export const arrayToString = (arr) => {
  let str = ''
  arr.map(item => {
    str += item + ','
  })
  return str = str.substring(0, str.length - 1)
}

// 判断类型
export const judgmentType = (p) => {
  switch (p) {
    case 4:
      return {
        model: 0,
        params: 'playlist'
      }
    case 1:
      return {
        model: 4,
        params: 'song'
      }
    case 2:
      return {
        model: 3,
        params: 'album'
      }
    case 5:
      return {
        model: 1,
        params: 'program'
      }
    default:
      return {
        model: -1,
        params: 'null'
      }
  }
}